<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //? 首节流 是指在时间间隔内的第一次触发事件时立即执行函数，然后在间隔时间内忽略所有的触发事件
    function throttleFirst(fn,delay) {
        let timer = null
        return function (...args) {
            //? timer为null 说明是第一次进入 立即执行函数 设置timer保证下次进入不会再触发!timer逻辑 等到timer结束清除
            if (!timer) {
                fn(...args)
                timer = setTimeout(() => {
                    //? 时间到 timer重设为null
                    timer = null
                },delay)
            }
        }
    }
    function testThrottleFirst() {
        console.log('throttleFirst test start');
        const throttleFunc = throttleFirst(function() {
            console.log('throttleFirst function called');
        }, 1000);
        throttleFunc(); //? 第一次触发
        setTimeout(throttleFunc, 500); //? 首节流
        setTimeout(throttleFunc, 1000); //? 首节流
        setTimeout(throttleFunc, 1500); //? 超时触发 此时函数里的time还是第一次的time 因为上个代码没有执行if里的
    }
    testThrottleFirst();
</script>
</body>
</html>
